<section>
<p>AutoField</p>
<p><code>class AutoField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#AutoField">[source]</a></p>
<p>一个自动增长的整形字段，通常情况下不需要我们直接使用，Django会自动添加; 如果Model不指定主键,Django会在你创建的模型中自动添加一个该类型的字段。详情请参考Model那一章</p>
</section>
<section>
<p>BigAutoField</p>
<p><code>class BigAutoField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#BigAutoField">[source]</a></p>
<p><em>[1.10新增]</em>功能同AutoField，只不过由32位整形改成了64位整形，可以表示更大的数字</p>
</section>
<section>
<p>BigIntegerField</p>
<p><code>class BigIntegerField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#BigIntegerField">[source]</a></p>
<p>一个64位的整形字段，表示范围-9223372036854775808到9223372036854775807. 默认的html样式为TextInput.</p>
</section>
<section>
<p>BinaryField</p>
<p><code>class BinaryField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#BinaryField">[source]</a></p>
<p>这是一个用来存储二进制数据的Field. 只支持bytes赋值，注意这个Field只有很有限的功能。例如，该类型不支持filter，不支持排序等。使用该字段来存储文件是一种坏习惯。不推荐使用。</p>
</section>
<section>
<p>BooleanField</p>
<p><code>class BooleanField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#BooleanField">[source]</a></p>
<p>布尔类型，只有true和false</p>
<p>此字段的默认表单样式是一个CheckboxInput。如果允许该字段的值为null，请使用NullBooleanField。如果没有指定Field.default的话， BooleanField的默认值是None。</p>
</section>
<section>
<p>CharField</p>
<p><code>class CharField(max_length=None, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#CharField">[source]</a></p>
<p>该字段用来存储字符串类型的数据，如果文本数据很长很长，请使用TextField。</p>
<p>这个字段默认的表单样式是TextInput.CharField，有一个必须的参数:<code>CharField.max_length</code>, 这个参数表示字符串的最大长度</p>
</section>
<section>
<p>CommaSeparatedIntegerField</p>
<p><code>class CommaSeparatedIntegerField(max_length=None, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#CommaSeparatedIntegerField">[source]</a></p>
<p>逗号分隔的整数字段，从1.9版本开始已废弃，参考CharField的validators=[validate_comma_separated_integer_list]</p>
</section>
<section>
<p>DateField</p>
<p><code>class DateField(auto_now=False, auto_now_add=False, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#DateField">[source]</a></p>
<p>存储日期的字段，对应于python中的datetime.date类型, 该字段有几个特有的可选参数</p>
<p>DateField.auto_now</p>
<p>如果为True，每次调用save都会把该字段的值设置为当前时间。这个特性只在调用Model.save()是才会触发，调用Model.update不会触发该特性</p>
<p>DateField.auto_now_add</p>
<p>如果为True，每次新创建一个Model实例时会将该字段的值设为当前时间，注意：只有在新建Model时才会设置。注意：创建Model实例时，如果手动给该字段赋值会被忽略，还是会设置为当前时间的值</p>
<p>auto_now_add, auto_now和default是相互排斥的. 他们之间的任何组合使用将会引发错误。在目前的实现中，设置auto_now或者auto_now_add为True将使得这个字段同时得到editable=False和blank=True这两个设置.auto_now和auto_now_add总是使用default timezone设置的时区来判定当前时间</p>
<p>该字段默认的html样式为TextInput</p>
</section>
<section>
<p>DateTimeField</p>
<p><code>class DateTimeField(auto_now=False, auto_now_add=False, **options)</code><a href="class DateTimeField(auto_now=False, auto_now_add=False, **options)[source]">[source]</a></p>
<p>该字段存储日期时间类型的值，对应于python的datetime.datetime类型, 参数同DateField。默认的html样式为TextInput</p>
</section>
<section>
<p>DecimalField</p>
<p><code>class DecimalField(max_digits=None, decimal_places=None, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#DecimalField">[source]</a></p>
<p>存储固定精度的十进制数，对应于python的Decimal类型。必填参数：</p>
<p>DecimalField.max_digits</p>
<p>存储的数字所允许的最大位数，包括小数点后的位数。该值必须大于等于decimal_places。</p>
<p>DecimalField.decimal_places</p>
<p>表示小数点后面的位数</p>
<p>例:假设最大存储999，要有2位小数，那么应该这么写</p>
<pre>
models.DecimalField(max_digits=5, decimal_places=2)
</pre>
<p>当localize参数为False时，该字段默认的html样式为NumberInput，其他情况下为TextInput</p>
</section>
<section>
<p>DurationField</p>
<p><code>class DurationField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#DurationField">[source]</a></p>
<p>该字段存储一个时间间隔，对应于python的timedelta。PostgreSQL中对应的数据类型为<code>interval</code>，oracle中对应的数据类型为INTERVAL DAY(9) TO SECOND(6), 其他数据库用bigint来存储，单位是毫秒</p>
</section>
<section>
<p>EmailField</p>
<p><code>class EmailField(max_length=254, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#EmailField">[source]</a></p>
<p>一个使用CharField实现的存储电子邮件地址的类型，该类型会使用EmailValidator检查输入的地址是否是一个合法的邮件地址。</p>
</section>
<section>
<p>FileField</p>
<p><code>class FileField(upload_to=None, max_length=100, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FileField">[source]</a></p>
<p>此类型用于上传文件，不支持primary_key和unique参数</p>
<p>FileField.upload_to</p>
<p>可选参数，这个参数用于指定文件上传到哪个目录或者指定其文件名(包含了路径的文件名)。</p>
<p>这个参数可以通过传入strftime()格式的字符串来实现按照时间分目录存储的效果, 这个字符串会按照上传这个行为发生的时间自动替换相应的时间参数。例:</p>
<pre>
class MyModel(models.Model):
    # 文件被上传到MEDIA_ROOT/uploads目录
    upload = models.FileField(upload_to='uploads/')
    # or...
    # 文件上传到MEDIA_ROOT/uploads/2015/01/30(用户在2015-01-30这一天上传文件)目录
    upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
</pre>
<p>如果我们是采用FileSystemStorage这个组件来处理上传文件，那么最终的上传目录为MEDIA_ROOT(在Settings.py中设置)的值与upload_to的值拼接起来得到的值。另外，在给upload_to传参数时也可以传一个可调用的对象(callable，例如函数)。这个可调用的对象必须能够接受2个参数(第一个参数为Model的实例对象，第二个为文件名)，并返回一个包含unix系统格式的文件路径(filepath)的字符串。下面是这2个参数的介绍:</p>
<table>
<tr>
    <td>参数名</td>
    <td>参数描述</td>
</tr>
<tr>
    <td>instance参数</td>
    <td>一个定义了FileField的Model的实例，直白的讲就是文件要与哪个实例相关联，通常情况下这个实例对象是一个还没有save()过的对象(还没存到数据库)</td>
    </tr>
<tr>
    <td>filename</td>
    <td>文件名</td>
</tr></table>
<p>例:</p>
<pre>
def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)
</pre>
<p>FileField.storage</p>
<p>一个storage类型的对象，用于管理文件的。详情参考Django进阶-view系列下的Storage API章节。FileField类型的字段默认的Html样式为ClearableFileInput</p>
<p>在Model中使用FileField或者ImageField(see below)的步骤:</p>
<ul>
    <li>在settings.py中定义MEDIA_ROOT，表示文件上传的根目录(所有上传的文件都会存在这个目录里)，其值必须是绝对路径。同样的定义MEDIA_URL，这个属性的值表示指向MEDIA_ROOT目录的url。</li>
    <li>在模型中添加FileField或ImageField字段, 定义upload_to参数来指定MEDIA_ROOT的子目录，用来存放上传的文件。</li>
    <li>数据库中存放的仅是这个文件的路径（相对于MEDIA_ROOT的相对路径). 使用Django提供的url属性可以很方便的获取文件的url。比如,如果你的ImageField字段的名字是mug_shot(不是文件名，是Model里的字段名), 你可以在template中用{{ object.mug_shot.url}}获得你照片的绝对路径。
</li>
</ul>
<p>例如，如果你的MEDIA_ROOT设定为'/home/media'，并且upload_to设定为'photos/%Y/%m/%d'。 upload_to的'%Y/%m/%d'被strftime()所格式化；'%Y' 将会被格式化为一个四位数的年份, '%m' 被格式化为一个两位数的月份'%d'是两位数日份。如果你在Jan.15.2007这一天上传了一个文件，它将被保存在/home/media/photos/2007/01/15目录下.</p>
<p>如果你想获得上传文件的存盘文件名，或者是文件大小，你可以分别使用name和size属性, 更多参见Django进阶-View这个系列里面的文件管理相关章节</p>
<p>FileField和FieldFile</p>
<p><code>class FieldFile</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FieldFile">[source]</a></p>
<p>在Model中添加FileField类型的字段时, 你实际上会获得一个FieldFile的实例代替你操作底层的文件。除了继承自django.core.files.File的功能外(open,read, write等), 这个类还有其他属性和方法可以用于访问文件:</p>
<p>FieldFile.name</p>
<p>包含了相对路径的文件名，从MEDIA_ROOT开始的相对路径</p>
<p>FieldFile.size</p>？
<p>Storage.size()的值</p>
<p>FieldFile.url</p>
<p>一个只读属性，通过该属性能够拿到文件的url(相对于MEDIA_ROOT的相对路径)</p>
<p><code>FieldFile.open(mode='rb')</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FieldFile.open">[source]</a></p>
<p>以mode指定模式打开或者重新打开该Field关联的文件。与python的open不同点在于，此方法不返回文件描述符。FieldField底层关联的文件会在访问时自动打开，因此实际使用中很少用到此方法</p>
<p><code>FieldFile.close()</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FieldFile.close">[source]</a></p>
<p>关闭文件，与python中的file.close()作用相同</p>
<p><code>FieldFile.save(name, content, save=True)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FieldFile.save">[source]</a></p>
<p>该方法接受一个文件名参数和一个文件内容参数，这个方法把这2个参数传递给底层的storage并把文件关联到这个字段。这个方法用来手动更新文件的内容。</p>
<p>content参数为文件的内容，它应该是django.core.files.File的一个实例。可以从python的file类型的对象构建File。例:</p>
<pre>
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
</pre>
<p>也可以由字符串来构建File。例如:</p>
<pre>
from django.core.files.base import ContentFile
myfile = ContentFile("hello world")
</pre>
<p><code>FieldFile.delete(save=True)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#FieldFile.delete">[source]</a></p>
<p>此方法的作用是删除与这个Field关联的文件，save参数为True表示，调用这个方法后，会执行一次Model.save()</p>
<p>注意:当一个Model实例被删除后，其关联的文件并不会被删除，需要手动处理</p>
</section>
<section>
<p>FilePathField</p>
<p><code>class FilePathField(path=None, match=None, recursive=False, max_length=100, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#FilePathField">[source]</a></p>
<p>一个由CharField实现的字段，该字段的值只能是文件系统上某个目录下面的文件的名字</p>
<p>FilePathField.path</p>
<p>必填参数，用于指定目录，FilePathField字段的值只能为该目录下的某一个文件的名字</p>
<p>FilePathField.match</p>
<p>可选参数。一个正则表达式类型的字符串。只能匹配文件名(不包含路径)</p>
<p>FilePathField.recursive</p>
<p>可选参数，默认为False。该参数指定FilePathField在工作时是否包含子目录</p>
<p>FilePathField.allow_files</p>
<p>默认为True，表示是否应当包含指定目录里的文件</p>
<p>FilePathField.allow_folders</p>
<p>默认为False， 表示是否应当包含指定目录下的目录。allow_files和allow_folders必须有一个位True，并且只能一个为True</p>
<p>举例:</p>
<pre>
FilePathField(path="/home/images", match="foo.*", recursive=True)
</pre>
<p>以上代码将匹配/home/images/foo.png而不是/home/images/foo/bar.png 因为只允许匹配文件名(foo.png和bar.png).</p>
</section>
<section>
<p>FloatField</p>
<p><code>class FloatField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#FloatField">[source]</a></p>
<p>浮点数类型，对应python的float。当localize参数为False时，该字段默认的html样式为NumberInput，其他情况下为TextInput</p>
</section>
<section>
<p>ImageField</p>
<p><code>class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/files/#ImageField">[source]</a></p>
<p>从FileField继承了所有的属性和方法，另外添加了验证文件是否为图片的逻辑以及height和width这两个属性(代表图像的长和宽，单位是像素)</p>
<p>ImageField.height_field</p>
<p>指定哪个字段存储了图片的高度</p>
<p>ImageField.width_field</p>
<p>指定哪个字段存储了图片的宽度</p>
<p>ImageField依赖<a href="https://pillow.readthedocs.io/en/latest/">pillow</a>这个第三方库</p>
</section>
<section>
<p>IntegerField</p>
<p><code>class IntegerField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#IntegerField">[source]</a></p>
<p>存储Int类型的数据，各种数据库都安全的范围为-2147483648到2147483647</p>
</section>
<section>
<p>GenericIPAddressField</p>
<p><code>class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#GenericIPAddressField">[source]</a></p>
<p>存储以字符串表示的IPv4或者IPv6地址.</p>
<p>GenericIPAddressField.protocol</p>
<p>可选的值为"IPv4"，"IPv6"和"both"(区分大小写)，其作用为限定该字段可以存的值的类型</p>
<p>GenericIPAddressField.unpack_ipv4</p>
<p>布尔类型，默认为False，作用是从类似::ffff:192.0.2.1的这种可以映射到IPv4的地址中解析IPv4类型的地址。如果为True，那么::ffff:192.0.2.1会被解析为192.0.2.1。此参数只能在protocol设为both的时候使用</p>
<p>该字段的null和blank这两个参数必须同时为true或false</p>
</section>
<section>
<p>NullBooleanField</p>
<p><code>class NullBooleanField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#NullBooleanField">[source]</a></p>
<p>作用同BooleanField，但是允许存储NULL</p>
</section>
<section>
<p>PositiveIntegerField</p>
<p><code>class PositiveIntegerField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#PositiveIntegerField">[source]</a></p>
<p>该字段只能存0或正整数，范围从0到2147483647</p>
</section>
<section>
<p>PositiveSmallIntegerField</p>
<p><code>class PositiveSmallIntegerField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#PositiveSmallIntegerField">[source]</a></p>
<p>作用同PositiveIntegerField，只是可存的整数的范围更小，0到32767</p>
</section>
<section>
<p>SlugField</p>
<p><code>class SlugField(max_length=50, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#SlugField">[source]</a></p>
<p>Slug是一个新闻术语（通常叫做短标题）。一个slug只能包含字母、数字、下划线或者是连字符，通常用来作为短标签。通常它们是放在URL里的。使用该字段会默认设置Field.db_index为True</p>
<p>SlugField.allow_unicode</p>
<p>1.9版本新增的，如果设为True，那么该字段可以接受unicode字符(默认只接受ascii字符)</p>
</section>
<section>
<p>SmallIntegerField</p>
<p><code>class SmallIntegerField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#SmallIntegerField">[source]</a></p>
<p>作用同IntegerField，只不过存储的整数范围较小，-32768 to 32767</p>
</section>
<section>
<p>TextField</p>
<p><code>class TextField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#TextField">[source]</a></p>
<p>一个可以存储很长内容的文本字段，默认的html样式为Textarea</p>
</section>
<section>
<p>TimeField</p>
<p><code>class TimeField(auto_now=False, auto_now_add=False, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#TimeField">[source]</a></p>
<p>时间字段，对应python的datetime.time类型，参数的使用方式同DateField</p>
</section>
<section>
<p>URLField</p>
<p><code>class URLField(max_length=200, **options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#URLField">[source]</a></p>
<p>以CharField实现的存储url的字段，</p>
</section>
<section>
<p>UUIDField</p>
<p><code>class UUIDField(**options)</code><a href="https://docs.djangoproject.com/en/1.10/_modules/django/db/models/fields/#UUIDField">[source]</a></p>
<p>该字段用来存储uuid， 对应python的UUID类型。数据库使用Postgresql时，数据库里面存的是uuid类型的数据，其他数据库是存char(32)类型的数据</p>
</section>